<?php
/**
 * @ClassName: Test
 * @Description: TODO
 * @author: wyaohu
 * @Date: 2024/9/8 21:20
 * @Version: V1.0.0
 */

namespace app\test\controller;

use app\common\model;
use think\Controller;
use think\facade\Env;

class Test extends Controller
{
    function index()
    {
        /*$member = model\Member::get(10001);
        var_dump($member);
        $agent_level_name = model\AgentLevel::where('level', 1)->value('name') ?? 'J0';
        $brand_level_name = model\AgentAward::where('level', 0)->where('type', 1)->value('name') ?? 'Z0';
        $operation_level_name = model\AgentAward::where('level', 0)->where('type', 3)->value('name') ?? '';
        var_dump($agent_level_name);
        var_dump($brand_level_name);
        var_dump($operation_level_name);*/

        var_dump(env('first_leader'));
        var_dump(Env::get('first_leader'));
        var_dump(env('default_password'));
        var_dump(Env::get('default_password'));
        var_dump(env('db.database'));
        var_dump(Env::get('db.database'));
        var_dump(env('merchant_deposit_uid'));
        var_dump(Env::get('merchant_deposit_uid'));
    }

    function token()
    {
        $token = input('token');
        $key = 'ZDNkM0xtZDVaSFJ5WVdSbExtTnZiUT09';
        var_dump('原始Token：' . $token);

//        $encrypted = encryption($token, $key);
        $encrypted = $this->encryptToken($token, $key);
        var_dump('Token加密：' . $encrypted);

//        $decrypted = decryption($encrypted, $key);
        $decrypted = $this->decryptToken($encrypted, $key);
        var_dump('Token解密：' . $decrypted);
    }

    /**
     * 加密Token为32字节字符串（64个十六进制字符）
     *
     * @param string $token 需要加密的Token
     * @param string $key 加密密钥（建议至少32个字符）
     * @return string 加密后的64字符十六进制字符串
     */
    function encryptToken($token, $key)
    {
        // 生成随机的初始化向量(IV)
        $iv = openssl_random_pseudo_bytes(16);

        // 从密钥派生加密密钥
        $encryptionKey = hash('sha256', $key, true);

        // 加密数据
        $encrypted = openssl_encrypt(
            $token,
            'AES-256-CBC',
            $encryptionKey,
            OPENSSL_RAW_DATA,
            $iv
        );

        // 组合IV和密文
        $combined = $iv . $encrypted;

        // 转换为十六进制字符串
        return bin2hex($combined);
    }

    /**
     * 解密Token
     *
     * @param string $encryptedToken 加密后的Token（64字符十六进制字符串）
     * @param string $key 加密密钥
     * @return string|false 解密后的原始Token，失败返回false
     */
    function decryptToken($encryptedToken, $key)
    {
        // 将十六进制字符串转换为二进制
        $combined = hex2bin($encryptedToken);
        if ($combined === false) {
            return false;
        }

        // 分离IV和密文（IV为前16字节）
        $iv = substr($combined, 0, 16);
        $ciphertext = substr($combined, 16);

        // 从密钥派生解密密钥
        $encryptionKey = hash('sha256', $key, true);

        // 解密数据
        return openssl_decrypt(
            $ciphertext,
            'AES-256-CBC',
            $encryptionKey,
            OPENSSL_RAW_DATA,
            $iv
        );
    }

}